/**
 * 延迟函数
 */
export const delay = ( seconds = 0 ) => new Promise(resolve => setTimeout(resolve, seconds))

 /**
  * 简化 async/await 使用try/catch的操作函数
  * @param {Promise} promise promise对象
  */
 export const platPromise = promise => promise.then(d => [undefine, d]).catch(e => [e, undefined] )

 /**
  * 补零参数
  * @param {String|Number} num 必选,需要补零的参数
  * @param {number} len 可选, 补零参数的长度为多小, 不够才会补零, 默认为2
  */
 export const fillZero = (num, len = 2) => {
     let str = num + ''
     while(str.length < len){
        str = '0' + str
     }
     return str
 }

/**
 * 时间戳转化时间的函数
 * @param {Date} timeStamp 必选, 时间戳
 */
export const formatTime = (timeStamp) => {
    const date = new Date(timeStamp);
    return `${date.getFullYear()}-${fillZero(date.getMonth() + 1)}-${fillZero(date.getDate())} 
            ${fillZero(date.getHours())}:${fillZero(date.getMinutes())}:${fillZero(date.getSeconds())}`;
};

/**
 * 日期格式化函数
 * @param {string} format 日期的格式
 * @param {Date} date 日期对象
 */
export const formatDate = (date = new Date(), format = 'YYYY/MM/DD') => {
    // format的规范值, 只能用以下的字母表示
    const specs = 'YYYY:MM:DD:HH:mm:ss'.split(':');
    // toISOString 函数是根据世界时间返回日期字符串, 因此需要纠正时区之差
    const localISODate = new Date(date.getTime() - (new Date().getTimezoneOffset() * 60 * 1000));
    // 返回指定格式的日期(format)
    return localISODate.toISOString().split(/[-:.TZ]/).reduce((format, item, i) => {
        return format.split(specs[i]).join(item);
    }, format);
};

/**
 * 转化 url 的 query 参数为对象的函数
 * @param {string} url 需要转化的 query 的 url, 默认值是当前页面的 url
 */
export const parseQuery = (url = window.location.search) => {
    const param = {};
    const querys = url.slice(url.indexOf('?') + 1);
    querys.replace(/([^\?\/&]+)=([^\?\/&]+)/g, (s, k, v) => param[k] = decodeURIComponent(v));
    return param;
}


 /** 判断当前浏览器 */
export const browser = (() => {
    // 获取 userAgent 信息
    const u = navigator.userAgent;
    // 返回结果
    return {
        // 苹果、谷歌内核
        isWebKit: u.indexOf('AppleWebKit') > -1, 
        // 是否为移动终端
        isMobile: !!u.match(/AppleWebKit.*Mobile.*/), 
        // ios 终端
        isIOS: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), 
        // android 终端
        isAndroid: u.indexOf('Android') > -1 || u.indexOf('Adr') > -1, 
        //是否为 iPhone 或者 QQHD 浏览器
        isIPhone: u.indexOf('iPhone') > -1, 
        //是否 iPad
        isIPad: u.indexOf('iPad') > -1, 
        //是否 web 应该程序，没有头部与底部
        isWebApp: u.indexOf('Safari') == -1, 
        //是否微信
        isWeiXin: u.indexOf('MicroMessenger') > -1, 
        //是否 QQ
        isQQ: u.match(/\sQQ/i) == " qq" 
    };
})();
